export default {
    inject: {
        addFormCheck:{
            default(){
                return ()=>{}
            }
        },
        updateRequired:{
            default(){
                return ()=>{}
            }
        },
        updateMessage:{
            default(){
                return ()=>{}
            }
        },
        label:{
            default:''
        },
        
        updateCheckStatus:{
            default(){
                return ()=>{}
            }
        },
        delFormCheck:{
            default(){
                return ()=>{}
            }
        }
    },
    provide(){
        return {
            updateCheckStatus:(fun)=>{
                this.__updateCheckStatus = fun;
            },
            parentPlaceholder: this.placeholder
        }
    },
    data(){
        return {
            checkStatus:true,
            __updateCheckStatus:()=>{},
        }
    },
    props:{
        modelValue:{
            type:[String,Number,Boolean,Array,Object],
            default:''
        },
        name:{
            type:String,
            default:''
        },
        disabled:{
            type:Boolean,
            default:false
        },
        readonly:{
            type:Boolean,
            default:false
        },
        required:{
            type:Boolean,
            default:false
        },
        placeholder:{
            type:String,
            default:''
        },
        tabindex:{
            type:[String,Number],
            default:''
        }
    },
    emits: ['update:modelValue','change'],
    computed:{
        value:{
            get(){
                return this.modelValue;
            },
            set(val){
                this.$emit('update:modelValue',val);
                this.$emit('change',val);
                this.valueChange(val);
            }
        },
        id:{
            get(){
                return this.name!=''?this.name:'input' +  Math.random().toString(10).substr(2);
            }
        }
    },
    methods:{
        baseCheck(){
            this.checkStatus = true;
            let msg   = '';
            if(this.required && ( this.value === '' || this.value === null )){
                msg  = this.label + '不能为空';
            }else{
                msg =  this.check();
            }
            
            this.updateMessage(this.id,msg);
            
            if (msg !=''){
                this.checkStatus = false;// 'is-invalid';
                 
               
                
            }

            this.__updateCheckStatus(this.checkStatus);
            return msg;
        },
        check(){
            return '';
        },
        valueChange(val){
            if (!this.checkStatus) this.baseCheck();
        },
        focus(){
            
        }
    },
    mounted(){
        this.addFormCheck(this.id,this.baseCheck);
        this.updateRequired(this.id,this.required);
        this.updateCheckStatus((status)=>{
            this.checkStatus = status;
        });
    },
    unmounted(){
        this.delFormCheck(this.id);
    }
}